iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0
佛心分享-IT 人自學之術

使用 AnalogJS 建立部落格文章系列 第 12

Day 12 - 在部落格存檔頁面上對部落格文章進行排序

  • 分享至 

  • xImage
  •  

Goal: Sort the blog posts on the Blog Archive Page and further refactor on the Home Page.

The BlogComponent component uses injectContentFiles to retrieve all the markdown files from the content folders. The Blog Archive Page displays the blog posts in any order; therefore, I want to sort the posts by the datePublished property in descending order. injectContentFiles returns an array; consequently, I can apply the sort method to sort the objects.

Sort the blog post array

目標:對部落格存檔頁面上的部落格文章進行排序,並在主頁上進一步重構。

BlogComponent 元件使用 injectContentFiles 從內容資料夾擷取所有 markdown 檔案。部落格存檔頁面以任意順序顯示部落格文章;因此,我想按 datePublished 屬性進行排序。 insertContentFiles 傳回一個陣列;因此,我可以應用 sort 方法來對物件進行排序。

將部落格文章陣列排序

import { injectContentFiles } from '@analogjs/content';
import PostAttributes from '../../post-attributes';

export default class BlogComponent {
  readonly posts = injectContentFiles<PostAttributes>().sort(({attributes: a }, { attributes: b }) =>
    new Date(b.datePublished).getTime() - new Date(a.datePublished).getTime()
  );
}

datePublished 屬性是一個字串;因此,我使用該值建立 Date 物件,並且 getTime 方法會傳回總毫秒數。 然後,我比較兩個日期的總毫秒數,並將較晚的日期排在較舊的日期之前。

此外,HomeComponent 元件出現了 3 個 ,它們具有相同的 CSS 樣式和 HTML 結構。 我可以重構 HTML 範本以使用 for 迴圈來重複渲染 CardComponent 元件。

export default class HomeComponent {
    cardContents = [
        {
            title: 'Current Technical Stack',
            items: [
                "Angular",
                "Vue (Composition API)",
                "NestJS",
                "JavaScript",
                "HTMX",
                "PostgreSQL"
            ]
        },
        {
            title: "Areas of Interest",
            items: [
                "Angular Architecture",
                "REST API",
                "GraphQL",
                "Generative AI",
            ]
        },
        {
            title: "Hobbies",
            items: [
                "Learn Foreign Languages",
                "Learn Tech",
                "Exercise",
                "Blogging",
                "Watch Wrestling and make podcasts",
                "Travelling"
            ]
        }
    ]
}

首先,我建立一個 cardContents 陣列來儲存每張卡片的標題和清單項目。

<section class="flex justify-evenly">
        @for (content of cardContents; track $index) {
            <blog-card>
                <p header class="text-xl underline">{{ content.title }}<p>
                <ul class="text-left list-disc p-5">
                    @for (item of content.items; track item) {
                        <li>{{ item }}</li>
                    }
                </ul>
            </blog-card>
        }
 </section>

for 循環迭代 cardContents 陣列並呈現 CardComponent 元件。 title 屬性透過 header 屬性投影到 ng-contentitems 陣列被投影到預設的 ng-content

導航至 http://localhost:5173/home

主頁應該具有相同的外觀。

Github Repo:


上一篇
Day 11 - 在部落格主頁面中使用 Card 元件
系列文
使用 AnalogJS 建立部落格文章12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言